using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Package._SceneLayers
{
    /// <summary>
    /// <para>Upgrade Scene Layer</para>
    /// <para>Upgrades a scene layer package to the current I3S version in SLPK format or output to i3sREST format for use in ArcGIS Enterprise.</para>
    /// <para>以 SLPK 格式将场景图层包升级为当前 I3S 版本，或将输出升级为 i3sREST 格式以在 ArcGIS Enterprise 中使用。</para>
    /// </summary>    
    [DisplayName("Upgrade Scene Layer")]
    public class UpgradeSceneLayer : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public UpgradeSceneLayer()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_dataset">
        /// <para>Input Dataset</para>
        /// <para>The input scene layer package.</para>
        /// <para>输入场景图层包。</para>
        /// </param>
        /// <param name="_out_folder_path">
        /// <para>Output Folder</para>
        /// <para>The location where the output scene layer package will be created, or the cloud connection file (.acs) to output to i3sREST.</para>
        /// <para>将创建输出场景图层包的位置，或要输出到 i3sREST 的云连接文件 （.acs）。</para>
        /// </param>
        /// <param name="_out_name">
        /// <para>Output Name</para>
        /// <para>The name of the output scene layer.</para>
        /// <para>输出场景图层的名称。</para>
        /// </param>
        public UpgradeSceneLayer(object _in_dataset, object _out_folder_path, object _out_name)
        {
            this._in_dataset = _in_dataset;
            this._out_folder_path = _out_folder_path;
            this._out_name = _out_name;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Upgrade Scene Layer";

        public override string CallName => "management.UpgradeSceneLayer";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_dataset, _out_folder_path, _out_name, _out_log, _texture_optimization.GetGPValue()];

        /// <summary>
        /// <para>Input Dataset</para>
        /// <para>The input scene layer package.</para>
        /// <para>输入场景图层包。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_dataset { get; set; }


        /// <summary>
        /// <para>Output Folder</para>
        /// <para>The location where the output scene layer package will be created, or the cloud connection file (.acs) to output to i3sREST.</para>
        /// <para>将创建输出场景图层包的位置，或要输出到 i3sREST 的云连接文件 （.acs）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Folder")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_folder_path { get; set; }


        /// <summary>
        /// <para>Output Name</para>
        /// <para>The name of the output scene layer.</para>
        /// <para>输出场景图层的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_name { get; set; }


        /// <summary>
        /// <para>Output Log File</para>
        /// <para>The output log file that will summarize the results of the evaluation.</para>
        /// <para>将汇总评估结果的输出日志文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Log File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_log { get; set; } = null;


        /// <summary>
        /// <para>Texture Optimization</para>
        /// <para><xdoc>
        ///   <para>Specifies the textures that will be optimized according to the target platform where the scene layer package is used. Desktop includes Windows, Linux, and Mac platforms.</para>
        ///   <bulletList>
        ///     <bullet_item>Desktop—Texture formats will be optimized for use in desktop and web platforms. Texture formats will be JPEG and DXT. This is the default.</bullet_item><para/>
        ///     <bullet_item>None—Textures formats will be optimized for use in a desktop platform. The texture format will be JPEG.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将根据使用场景图层包的目标平台进行优化的纹理。桌面包括 Windows、Linux 和 Mac 平台。</para>
        ///   <bulletList>
        ///     <bullet_item>桌面 - 纹理格式将进行优化，以便在桌面和 Web 平台中使用。纹理格式为 JPEG 和 DXT。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>无 （None） - 纹理格式将进行优化，以便在桌面平台中使用。纹理格式将为 JPEG。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Texture Optimization")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _texture_optimization_value _texture_optimization { get; set; } = _texture_optimization_value._DESKTOP;

        public enum _texture_optimization_value
        {
            /// <summary>
            /// <para>Desktop</para>
            /// <para>Desktop—Texture formats will be optimized for use in desktop and web platforms. Texture formats will be JPEG and DXT. This is the default.</para>
            /// <para>桌面 - 纹理格式将进行优化，以便在桌面和 Web 平台中使用。纹理格式为 JPEG 和 DXT。这是默认设置。</para>
            /// </summary>
            [Description("Desktop")]
            [GPEnumValue("DESKTOP")]
            _DESKTOP,

            /// <summary>
            /// <para>None</para>
            /// <para>None—Textures formats will be optimized for use in a desktop platform. The texture format will be JPEG.</para>
            /// <para>无 （None） - 纹理格式将进行优化，以便在桌面平台中使用。纹理格式将为 JPEG。</para>
            /// </summary>
            [Description("None")]
            [GPEnumValue("NONE")]
            _NONE,

        }

        public UpgradeSceneLayer SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}